// 用户注册和登录的表单项验证的通用代码

// es6新型构造器
class FieldValidator {
    // 传入每个表单项验证的不同的方法validatorFunc
    constructor(id, validatorFunc) {
        this.validatorFunc = validatorFunc;
        this.inputId = document.querySelector(`#${id}`);// 获取表单项的dom元素
        this.p = this.inputId.nextElementSibling;// 获取表单项下面的p元素
        this.inputId.onblur = () => {// 失去焦点时验证表单项
            this.validate();
        }
    }
    // 原型方法validate，失去焦点时会调用验证
    async validate() {
        const err = await this.validatorFunc(this.inputId.value);// validatorFunc可能是一个异步函数
        if (err) {
            this.p.innerText = err;
            return false;
        } else {
            this.p.innerText = '';
            return true;
        }
    }
    // 静态方法validate，提交表单时验证所有表单项
    static async validate(...validators) {
        const pros = validators.map(v => v.validate());
        const result = await Promise.all(pros);// 等待pros数组的任务全部成功完成返回false或true
        return result.every(r => r);// 全部true才返回true
    }
}